<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
import fingerprintjs from '@fingerprintjs/fingerprintjs'
import {setResponseInterceptor} from './api/http'
import {setToastErrorMessage, setToastSuccessMessage} from '@/utils/entity/Result'
import ErrorLogService from '@/api/ErrorLogService'
import lodash from 'lodash'

export default {
  name: 'App',
  data() {
    return {
      first: true // 标记为首次加载
    }
  },
  created() {
    const begin = new Date()
    fingerprintjs.load().then(async fp => { // 获取客户端指纹
      const result = await fp.get()
      console.log(['fingerprint', result.visitorId, begin.formatDatetime(), new Date().formatDatetime()])
    })
    // 设置消息弹窗
    setToastSuccessMessage(msg => {
      this.$message.success(msg)
    })
    setToastErrorMessage((msg, code) => {
      // switch (code){
      //   'A00005':
      //     this.$message.error('自定义异常消息，不弹出后端返回的 message')
      //     return
      // }
      this.$message.error(msg)
    })
    /**
     * 上报异常日志
     * @param response {AxiosResponse}
     */
    const sendErrorLog = response => {
      const url = response.config?.url || ''
      if (
        ![
          // 白名单过滤，白名单错误日志不上报
          '/logout',
          '/open/auth/login/',
          '/open/error-log/'
        ].some(val => url.startsWith(val))
      ) {
        if (response.status === 200) {
          if (!lodash.isObject(response.data)) {
            return
          }
          if (response.data?.code === 'A00000') {
            return
          }
        }
        try {
          // 异常日志上报
          ErrorLogService.save((response.headers || {})['x-trace-id'], {
            url: response.config?.url,
            method: response.config?.method,
            status: response.status,
            statusText: response.statusText,
            reqParams: response.config?.params,
            reqData: response.config?.data,
            resData: response.data
          })
        } catch (e) {
          //
        }
      }
    }

    // http 响应拦截
    setResponseInterceptor(
      response => {
        sendErrorLog(response)
        return response
        // const {code} = response.data
        // if (code === 'A00003') { // A00003:会话超时
        //   // if (this.first) {
        //   //   this.first = false
        //   //   this.$store.dispatch('user/clearToken').then(() => {
        //   //     console.error('会话超时1')
        //   //     location.reload()
        //   //   })
        //   // } else {
        //   //   this.$message.error({
        //   //     message: '会话超时',
        //   //     duration: 1500,
        //   //     onClose: () => {
        //   //       this.$store.dispatch('user/clearToken').then(() => {
        //   //         console.error('会话超时2')
        //   //         location.reload()
        //   //       })
        //   //     }
        //   //   })
        //   // }
        //   this.$message.error({
        //     message: '会话超时',
        //     duration: 1500,
        //     onClose: () => {
        //       this.$store.dispatch('user/clearToken').then(() => {
        //         location.reload()
        //       })
        //     }
        //   })
        // } else {
        //   return response
        // }
      },
      response => {
        // console.log('interceptors.response response.status !== 200')
        if (response.status === 401) { // 未登录或登录超时
          this.$message.error({
            message: '会话超时',
            duration: 1500,
            onClose: () => {
              this.$store.dispatch('user/clearToken').then(() => {
                location.reload()
              })
            }
          })
        } else {
          sendErrorLog(response)
        }
      }
    )
    // UploadService.csrfToken() // 初始化 csrf token
  }
}
</script>
